const CFG = require('../config');
const tbDevice = require('../model/tb_device');
const fs = require('fs');
const httpsServ = require('https');
const webDevManger = require('./webDevManger');
const webSocketServer = require('ws').Server; // 引用Server类

/* 创建了一个websocket服务器，用于前端网页连接，并进入对应回调处理
  主要处理逻辑在webDevManger.js文件中，用于处理设备控制页面和mq的交互
*/
const DebugMode=true;//是否开启调试模式，关闭后只有来自主站的连接才被允许

// 创建request请求监听器
const processRequest = function(req, res) {
  res.writeHead(200);
  res.end('hello WebSockets!\n');
}

const server = httpsServ.createServer({
  key: fs.readFileSync(CFG.WebSocket.ssl_key),
  cert: fs.readFileSync(CFG.WebSocket.ssl_crt)
}, processRequest).listen(CFG.WebSocket.port);

// 实例化WebSocket服务器
const wss = new webSocketServer({server:server});

wss.on('connection',(conn)=>{
  conn.on("close",(code,reason)=>{
    webDevManger.connUnreg(conn);
    console.log("webSocket 关闭连接",code,reason);
  })

  conn.on("error",(err)=>{
    webDevManger.connUnreg(conn);
    console.log("webSocket 异常关闭",err.errno);
  })

  //收到web客户端消息
  conn.on("message",(str)=>{
    webDevManger.webSocketIn(conn,JSON.parse(str));
  })

  //定时2秒，如果没有关键信息，则断开连接
  setTimeout(()=>{
    if(!DebugMode) if(conn.uid==null){webDevManger.connUnreg(conn,3012);return;}
    if(conn.hwid==null){webDevManger.connUnreg(conn,3011);return;}

    tbDevice.find(conn.hwid).then(Record=>{
      if(Record==null){ //数据没有本设备记录
        webDevManger.connUnreg(conn,3013);
      }
      else if(Record.uid!=conn.uid){
        if(!DebugMode) webDevManger.connUnreg(conn,3014);
      }
    })
  },2000);
})





